{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.stats import entropy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from temp_scaling import optimal_temp_scale, rescale_temp\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_entropy(myax, inclass, outclass, label, bins = np.logspace(-8, 0.5, num=30), show_legend = False, show_xlabel=False, show_ylabel=False):\n",
    "    myax.set_title(str(label), fontsize=12)\n",
    "    myax.set_xscale('log')\n",
    "    #bins = 10 ** np.linspace(-8, 0.5, 30)\n",
    "    myax.hist(inclass, bins=bins, color='red', label='In Class')\n",
    "    myax.hist(outclass, bins=bins, color='black', alpha=0.3, label = 'Out of Class')\n",
    "    myax.set_ylim((0, 1000))\n",
    "    if show_xlabel:\n",
    "        myax.set_xlabel('Entropy')\n",
    "    if show_ylabel:\n",
    "        myax.set_ylabel('Count')\n",
    "    if show_legend:\n",
    "        myax.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "swag_inclass = np.load('CIFAR5/unc_1_swag.npz')\n",
    "swag_outclass = np.load('CIFAR5/unc_0_swag.npz')\n",
    "\n",
    "swagdiag_inclass = np.load('CIFAR5/unc_1_swagdiag.npz')\n",
    "swagdiag_outclass = np.load('CIFAR5/unc_0_swagdiag.npz')\n",
    "\n",
    "drop_inclass = np.load('CIFAR5/unc_1_drop.npz')\n",
    "drop_outclass = np.load('CIFAR5/unc_0_drop.npz')\n",
    "\n",
    "sgd_inclass = np.load('CIFAR5/unc_1_sgd.npz')\n",
    "sgd_outclass = np.load('CIFAR5/unc_0_sgd.npz')\n",
    "\n",
    "swa_inclass = np.load('CIFAR5/unc_1_swa.npz')\n",
    "swa_outclass = np.load('CIFAR5/unc_0_swa.npz')\n",
    "\n",
    "swagdrop_inclass = np.load('CIFAR5/unc_1_swagdrop.npz')\n",
    "swagdrop_outclass = np.load('CIFAR5/unc_0_swagdrop.npz')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "sgd_val = np.load('CIFAR5/unc_sgd_val.npz')\n",
    "ts_inclass = np.load('CIFAR5/unc_sgd.npz')\n",
    "ts_outclass = np.load('CIFAR5/unc_0_ts.npz')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Before temperature - NLL: 0.177\n",
      "After temperature - NLL: 0.162 , Temperature: tensor([1.1490], requires_grad=True)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/wesley/Desktop/tesla/swa_uncertainties/experiments/uncertainty/temp_scaling.py:35: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n",
      "  return T.item(), F.softmax(logits / T).data.numpy()\n"
     ]
    }
   ],
   "source": [
    "T_sgd, rescaled_sgd = optimal_temp_scale(sgd_val[\"predictions\"], sgd_val[\"targets\"], max_iter=50, lr=1e-3)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "ts_inclass_predictions = rescale_temp(ts_inclass['predictions'], T_sgd)\n",
    "ts_outclass_predictions = rescale_temp(ts_outclass['predictions'], T_sgd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "eps = 1e-12\n",
    "ts_inclass_entropies = -np.sum(np.log(ts_inclass_predictions + eps) * ts_inclass_predictions, axis=1)\n",
    "ts_outclass_entropies = -np.sum(np.log(ts_outclass_predictions + eps) * ts_outclass_predictions, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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8OyzzwJw+umnc9NNNzF27NilbZIkSaqWI90tsvvuuzNu3DjWWGMNdt55Z/7whz8sszwzB33Gj6uuuopdd92VXXbZhfvvv58HHniAUaNGMXLkSD72sY9xzTXXsPbaawOw1157ccQRR/Dtb3+bxYsXD/XHkiRJUh8c6W6RtdZaa+njYcOG8fLLLy+zfNSoUayzzjo8/PDDbLPNNv2+zu9//3vOPvts7r77bjbYYAOOOOIIFi1axPDhw7nrrru45ZZb+P73v895553H9OnTueCCC7jzzju54YYb2HnnnbnnnnvYaKONKvuckrpIfwMFHXwsyrRp0/psP+igg5ociaR250h3Gzv11FM59thjWbhwIQALFy7kwgsvXKbPwoULWWeddRg9ejRPPvkk//Vf/wXA888/z4IFCzjggAM499xzueeeewD43e9+xx577MHpp5/OxhtvzNy5c5v7oSRJkrpQ945012Dk5ZhjjuH5559nt912Y8SIEYwYMYITTjhhmT477bQTu+yyC9tvvz3bbLMNe+21F1DMCT/kkENYtGgRmck555wDwIknnsjs2bPJTCZOnMhOO+3U9M8lSZLUbbq36G6B559/HijOsb3vvvsubT/vvPP67B8RnHTSSZx00knLLbv11luXPr7kkkv6XP+uu+5aru2aa64ZfMCSJEkaEk4vkSRJkipm0S1JkiRVzKJbkiRJqphFtyRJklQxD6SUJEnqVF14/vx25Ui3JEmSVLGuHenu7ypiq2owVx/r6enh2GOP5YEHHuCVV17hwAMP5F/+5V9Yc801B1zvzDPP5POf//xKxfODH/yAL37xi7z2ta/lpz/96TLLHnroIY477jgeeughRowYwQ477MA3v/lNZs2axdlnn83111+/Uu8lSZKkgTnS3SSZyfvf/34OPfRQZs+ezUMPPcTzzz/PF77whRWue+aZZ670+1100UV861vfWq7gXrRoEe973/s45phjmDNnDrNmzeKYY45h3rx5K/0ekiRJGhyL7iaZPn06I0eO5MgjjwRg2LBhnHPOOVx88cW8+OKLXHLJJXzyk59c2v/AAw/k1ltv5ZRTTuHPf/4zO++8M5MmTVruda+44gp22GEHxo8fz8knnwzA6aefzu23387HP/5xTjzxxGX6X3755bztbW9bZmR+v/32Y/z48cv0u+uuu9hzzz3ZZZdd2HPPPfntb38LwP3338/uu+/OzjvvzI477sjs2bN54YUXeN/73sdOO+3E+PHjufLKK4fmjyZJktQhunZ6SbPdf//9vOUtb1mmbdSoUWy55ZbMmTOn3/XOOusszjvvPO65557llj322GOcfPLJzJw5kw022ID999+f//zP/+SLX/wi06dP5+yzz2bChAnLrHPfffctF0dftttuO2677TaGDx/OT37yEz7/+c/zwx/+kAsuuIDPfOYzTJo0ib/85S8sXryYG2+8kc0335wbbrgBgAULFgzmTyJJktQ1LLqbJDOJPo4g7q99MO6++2723XdfxowZA8CkSZO47bbbOPTQQ1crVigK58mTJzN79mwigpdeegmAt73tbZxxxhn09PTw/ve/n2233ZYddtiBz33uc5x88skceOCB7L333qv9/pIkSUOtv2P6BnNs3upyekmTbL/99syYMWOZtoULFzJ37lxe//rXM3z4cF555ZWlyxYtWrTC18xVON3P9ttvz8yZM1fY7x//8R/Zb7/9uO+++5g2bdrSeD784Q8zdepUXvOa1/Dud7+b6dOn88Y3vpGZM2eyww47cOqpp3L66aevdFySJEmdzKK7SSZOnMiLL77IlClTAFi8eDEnnHACRxxxBGuvvTZbbbUV99xzD6+88gpz587lrrvuWrruiBEjlo40N9pjjz342c9+xp/+9CcWL17MFVdcwTve8Y4B4/jwhz/MHXfcsXQqCMCPfvQjfvOb3yzTb8GCBYwdOxaASy65ZGn7ww8/zDbbbMOnP/1pDj74YO69914ee+wx1l57bf7u7/6Oz33uc/zqV79a6b+PJElSJ+va6SXN2I3QKCK49tpr+cQnPsGXvvQlXnnlFQ444IClZybZa6+92HrrrZceFLnrrrsuXffoo49mxx13ZNddd+Wyyy5b2r7ZZpvx5S9/mf3224/M5IADDuCQQw4ZMI7XvOY1XH/99Rx33HEcd9xxjBgxgh133JGvf/3rzJ8/f2m/k046icmTJ/O1r32Nd77znUvbr7zySr73ve8xYsQIXvva1/LFL36Ru+++mxNPPJE11liDESNGcP755w/Vn02SJKkjxKpMUWh3EyZMyN5TOWbNmsWb3/zmFkUk8N+gt5U9V/zq/FCMiJmZOWHFPVujr5xVDa3s8Sk12v40M1+hvXPWfK2ZDs7L/qzKtViasY11eokk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\n",
      "text/plain": [
       "<Figure size 864x720 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams[\"figure.figsize\"] = (12,10)\n",
    "f, axarr = plt.subplots(2,3)\n",
    "plot_entropy(axarr[0,0], swag_inclass['entropies'], swag_outclass['entropies'], 'SWAG', show_legend=True, show_ylabel=True)\n",
    "plot_entropy(axarr[0,1], sgd_inclass['entropies'], sgd_outclass['entropies'], 'SGD')\n",
    "plot_entropy(axarr[0,2], drop_inclass['entropies'], drop_outclass['entropies'], 'Dropout')\n",
    "plot_entropy(axarr[1,0], swagdiag_inclass['entropies'], swagdiag_outclass['entropies'], 'SWAG-Diag', show_ylabel=True, show_xlabel=True)\n",
    "plot_entropy(axarr[1,1], swa_inclass['entropies'], swa_outclass['entropies'], 'SWA', show_xlabel=True)\n",
    "plot_entropy(axarr[1,2], ts_inclass_entropies, ts_outclass_entropies, 'Temperature Scaling', show_xlabel=True)\n",
    "plt.savefig('/home/wesley/Documents/Papers/udl_paper_source/icml/plots/pics/c55_entropy_hists.pdf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.savez('/home/wesley/Documents/Papers/udl_paper_source/icml/plots/data/c55_entropies.npz',\n",
    "        swag={'in':swag_inclass['entropies'], 'out':swag_outclass['entropies']},\n",
    "        swag_diag={'in':swagdiag_inclass['entropies'], 'out': swagdiag_outclass['entropies']},\n",
    "         drop={'in':drop_inclass['entropies'], 'out': drop_outclass['entropies']},\n",
    "         sgd={'in':sgd_inclass['entropies'], 'out':sgd_outclass['entropies']},\n",
    "         swa={'in':swa_inclass['entropies'], 'out':swa_outclass['entropies']},\n",
    "         ts={'in':ts_inclass_entropies, 'out':ts_outclass_entropies, 'temp':T_sgd}\n",
    "        )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def binned_kl_distance(dist1, dist2, smooth=1e-7, bins = np.logspace(-8, 0.5, num=30)):\n",
    "    dist1_pdf, _ = np.histogram(dist1, bins)\n",
    "    dist2_pdf, _ = np.histogram(dist2, bins)\n",
    "    \n",
    "    dist1_pdf = dist1_pdf + smooth\n",
    "    dist2_pdf = dist2_pdf + smooth\n",
    "    \n",
    "    dist1_pdf_normalized = dist1_pdf / dist1_pdf.sum()\n",
    "    dist2_pdf_normalized = dist2_pdf / dist2_pdf.sum()\n",
    "    \n",
    "    kldist = entropy(dist1_pdf_normalized, dist2_pdf_normalized) + entropy(dist2_pdf_normalized, dist1_pdf_normalized)\n",
    "    print(kldist)\n",
    "    return kldist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.3122097048920525\n",
      "3.147469679750145\n",
      "3.033979772295697\n",
      "2.267619554875406\n",
      "1.6859929584326525\n",
      "2.2411515900226866\n",
      "2.9845347377810465\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2.9845347377810465"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "binned_kl_distance(swag_inclass['entropies'], swag_outclass['entropies'])\n",
    "binned_kl_distance(sgd_inclass['entropies'], sgd_outclass['entropies'])\n",
    "binned_kl_distance(drop_inclass['entropies'], drop_outclass['entropies'])\n",
    "binned_kl_distance( swagdiag_inclass['entropies'], swagdiag_outclass['entropies'])\n",
    "binned_kl_distance(swa_inclass['entropies'], swa_outclass['entropies'])\n",
    "binned_kl_distance(swagdrop_inclass['entropies'], swagdrop_outclass['entropies'])\n",
    "binned_kl_distance(ts_inclass_entropies, ts_outclass_entropies)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.savez(file='entropy_results.npz',\n",
    "       swag={'inclass': swag_inclass['entropies'], 'outclass': swag_outclass['entropies']},\n",
    "       sgd={'inclass': sgd_inclass['entropies'], 'outclass': sgd_outclass['entropies']},\n",
    "       drop={'inclass': drop_inclass['entropies'], 'outclass': drop_outclass['entropies']},\n",
    "       swagdiag={'inclass': swagdiag_inclass['entropies'], 'outclass': swagdiag_outclass['entropies']},\n",
    "       swa={'inclass': swa_inclass['entropies'], 'outclass': swa_outclass['entropies']},\n",
    "       swagdrop={'inclass': swagdrop_inclass['entropies'], 'outclass': swagdrop_outclass['entropies']},\n",
    "       )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.254888050531469\n",
      "4.2428820462385035\n",
      "4.230876041945539\n",
      "4.218870037652574\n",
      "4.206864033359609\n",
      "4.194858029066644\n",
      "4.18285202477368\n",
      "4.170846020480714\n",
      "4.1588400161877495\n",
      "4.146834011894785\n",
      "4.134828007601819\n",
      "4.122822003308855\n",
      "4.110815999015889\n",
      "4.098809994722925\n",
      "4.08680399042996\n",
      "4.0747979861369945\n",
      "4.06279198184403\n",
      "4.050785977551065\n",
      "4.038779973258101\n",
      "4.026773968965135\n",
      "4.014767964672171\n",
      "4.002761960379205\n",
      "3.9907559560862405\n",
      "3.978749951793276\n",
      "3.9667439475003103\n",
      "3.9547379432073457\n",
      "3.942731938914381\n",
      "3.9307259346214156\n",
      "3.918719930328451\n",
      "3.9067139260354864\n",
      "3.894707921742521\n",
      "3.8827019174495563\n",
      "3.8706959131565917\n",
      "3.858689908863627\n",
      "3.8466839045706616\n",
      "3.834677900277697\n",
      "3.8226718959847314\n",
      "3.810665891691767\n",
      "3.7986598873988022\n",
      "3.7866538831058376\n",
      "3.774647878812872\n",
      "3.7626418745199075\n",
      "3.750635870226943\n",
      "3.7386298659339774\n",
      "3.726623861641013\n",
      "3.7146178573480473\n",
      "3.7026118530550827\n",
      "3.690605848762118\n",
      "3.6785998444691526\n",
      "3.666593840176188\n",
      "3.654587835883223\n",
      "3.642581831590258\n",
      "3.6305758272972932\n",
      "3.618569823004328\n",
      "3.606563818711363\n",
      "3.594557814418397\n",
      "3.5825518101254312\n",
      "3.570545805832465\n",
      "3.558539801539496\n",
      "3.5465337972465223\n",
      "3.5345277929535417\n",
      "3.522521788660545\n",
      "3.5105157843675183\n",
      "3.4985097800744325\n",
      "3.4865037757812294\n",
      "3.474497771487799\n",
      "3.462491767193919\n",
      "3.450485762899163\n",
      "3.4384797586026803\n",
      "3.426473754302818\n",
      "3.414467749996325\n",
      "3.402461745676824\n",
      "3.3904557413318095\n",
      "3.3784497369367523\n",
      "3.3664437324435377\n",
      "3.3544377277577944\n",
      "3.342431722694413\n",
      "3.3304257168903186\n",
      "3.3184197096333534\n",
      "3.3064136995266673\n",
      "3.294407683830421\n",
      "3.282401657170581\n",
      "3.270395609006325\n",
      "3.2583895186625016\n",
      "3.246383345586183\n",
      "3.234377010235608\n",
      "3.2223703565955018\n",
      "3.2103630786546464\n",
      "3.1983545762012544\n",
      "3.1863436719927805\n",
      "3.174328057069275\n",
      "3.162303203022643\n",
      "3.1502602294395228\n",
      "3.138181724685677\n",
      "3.1260335626591935\n",
      "3.1137489055819\n",
      "3.1011970317984634\n",
      "3.0881229736724327\n",
      "3.0740320499968607\n",
      "3.057974119866405\n"
     ]
    }
   ],
   "source": [
    "smooth_range = np.logspace(start=-30, stop=-1,num=100)\n",
    "smoothed_dists = np.zeros_like(smooth_range)\n",
    "for i in range(100):\n",
    "    smoothed_dists[i] = binned_kl_distance(swag_inclass['entropies'], swag_outclass['entropies'], smooth=smooth_range[i])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.00000000e-30, 1.96304065e-30, 3.85352859e-30, 7.56463328e-30,\n",
       "       1.48496826e-29, 2.91505306e-29, 5.72236766e-29, 1.12332403e-28,\n",
       "       2.20513074e-28, 4.32876128e-28, 8.49753436e-28, 1.66810054e-27,\n",
       "       3.27454916e-27, 6.42807312e-27, 1.26185688e-26, 2.47707636e-26,\n",
       "       4.86260158e-26, 9.54548457e-26, 1.87381742e-25, 3.67837977e-25,\n",
       "       7.22080902e-25, 1.41747416e-24, 2.78255940e-24, 5.46227722e-24,\n",
       "       1.07226722e-23, 2.10490414e-23, 4.13201240e-23, 8.11130831e-23,\n",
       "       1.59228279e-22, 3.12571585e-22, 6.13590727e-22, 1.20450354e-21,\n",
       "       2.36448941e-21, 4.64158883e-21, 9.11162756e-21, 1.78864953e-20,\n",
       "       3.51119173e-20, 6.89261210e-20, 1.35304777e-19, 2.65608778e-19,\n",
       "       5.21400829e-19, 1.02353102e-18, 2.00923300e-18, 3.94420606e-18,\n",
       "       7.74263683e-18, 1.51991108e-17, 2.98364724e-17, 5.85702082e-17,\n",
       "       1.14975700e-16, 2.25701972e-16, 4.43062146e-16, 8.69749003e-16,\n",
       "       1.70735265e-15, 3.35160265e-15, 6.57933225e-15, 1.29154967e-14,\n",
       "       2.53536449e-14, 4.97702356e-14, 9.77009957e-14, 1.91791026e-13,\n",
       "       3.76493581e-13, 7.39072203e-13, 1.45082878e-12, 2.84803587e-12,\n",
       "       5.59081018e-12, 1.09749877e-11, 2.15443469e-11, 4.22924287e-11,\n",
       "       8.30217568e-11, 1.62975083e-10, 3.19926714e-10, 6.28029144e-10,\n",
       "       1.23284674e-09, 2.42012826e-09, 4.75081016e-09, 9.32603347e-09,\n",
       "       1.83073828e-08, 3.59381366e-08, 7.05480231e-08, 1.38488637e-07,\n",
       "       2.71858824e-07, 5.33669923e-07, 1.04761575e-06, 2.05651231e-06,\n",
       "       4.03701726e-06, 7.92482898e-06, 1.55567614e-05, 3.05385551e-05,\n",
       "       5.99484250e-05, 1.17681195e-04, 2.31012970e-04, 4.53487851e-04,\n",
       "       8.90215085e-04, 1.74752840e-03, 3.43046929e-03, 6.73415066e-03,\n",
       "       1.32194115e-02, 2.59502421e-02, 5.09413801e-02, 1.00000000e-01])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "smooth_range"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'JS Distance')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtQAAAJUCAYAAAA1nbEoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd41eXh/vH7ySIEwgx7b2QjAUKSutuqlchSQQEREIGE2mq16rfDaqutttZKwhJBQUSUGazbojYJARKmIHuD7E1IyHh+fxj7s1QgkJw8Z7xf15XLHM4nyc0/vd798OQcY60VAAAAgKsT5HoAAAAA4MsIagAAAKAUCGoAAACgFAhqAAAAoBQIagAAAKAUCGoAAACgFAhqAAAAoBQIagAAAKAUCGoAAACgFEJcD7hSUVFRtmnTpq5nAAAAwM9lZ2cfsdbWutx1PhfUTZs2VVZWlusZAAAA8HPGmF0luY4jHwAAAEApENQAAABAKRDUAAAAQCkQ1AAAAEApENQAAABAKRDUAAAAQCkQ1AAAAEApENQAAABAKRDUAAAAQCkQ1AAAAEApENQAAABAKRDUAAAAQCkQ1AAAAEApENQAAABAKRDUAAAAQCkQ1AAAAEApENQAAABAKRDUAAAAQCkQ1AAAAEApENQAAABAKRDUAAAAQCkQ1AAAAEApENQlcORMnoa/vkK7j+a4ngIAAAAvQ1CXwK6jOcredVy9k9OUtuWI6zkAAADwIgR1CXRrUl2pSXGqWyVcQ6ct09R/b5e11vUsAAAAeAGCuoSa1Kyk+WNj9ZN2dfXHf36tR95Zo9z8QtezAAAA4BhBfQUqVQjRxMHX6lc/aa2Fq/dpwKQM7TtxzvUsAAAAOERQXyFjjJJuaqVXh0Rr15EcJYxP07LtR13PAgAAgCME9VW6pV0dLUiMU9WIUN03dZlmLt3JuWoAAIAARFCXQsvalbUwMU7Xta6l3y5aryfmrVNeAeeqAQAAAglBXUpVwkM1dWi0xt3UUnOy9mjglEwdPJXrehYAAADKCUFdBoKCjB79SRtNvO9abTpwWr3Hp2nl7uOuZwEAAKAcENRl6LaO9TR/bKzCQ4M1cHKm5qzY7XoSAAAAPIygLmNt61ZRalKcejavoV/PW6ffLvxK5wuKXM8CAACAhxDUHlAtIkzTh3XXqOuaa2bmLg2eukxHzuS5ngUAAAAPIKg9JCQ4SE/dfo1evqeL1uw9oYTxaVq396TrWQAAAChjBLWH9enaQPPGxEqSBkzK0MJV+xwvAgAAQFkiqMtBhwZVlTouXp0bVdMv5qzWH9/boIJCzlUDAAD4A4K6nERVrqBZI3tqaK8mmpq2Q8Omr9Dxs+ddzwIAAEApEdTlKDQ4SM/c2UF/6d9Ry3ccU0JKmr7+5pTrWQAAACgFgtqBe7o31tsPxSgvv0j9JmTo/XXfuJ4EAACAq0RQO3Jt4+paPC5ebetFauyslXrxo40qLLKuZwEAAOAKeTyojTHBxphVxpj3fuC5R4wxG4wxa40xnxljmnh6jzepUyVcb4+K0T3RjZSyZJsenJGlU7n5rmcBAADgCpTHHeqHJX19kedWSYq21naSNFfSC+Wwx6tUCAnWn/t31LN3tteXmw+rT3K6th4643oWAAAASsijQW2MaSjpZ5Km/tDz1tol1tqc4oeZkhp6co+3MsZoSK+mmjWyp06ey1eflHR9uuGg61kAAAAoAU/foX5Z0uOSSvKiyyMkfeDZOd6tZ/OaWjwuXs2iKmnkjCy98tkWFXGuGgAAwKt5LKiNMXdIOmStzS7BtYMlRUt68SLPjzLGZBljsg4fPlzGS71L/WoV9e7oXurbtYFe+mSzxs5aqTN5Ba5nAQAA4CKMtZ65A2qMeV7SEEkFksIlVZE031o7+ILrbpE0XtL11tpDl/u+0dHRNisrywOLvYu1Vq+l7dBz73+tlrUra8qQaDWNquR6FgAAQMAwxmRba6Mvd53H7lBba5+01ja01jaVNFDSv34gprtKmiwpoSQxHUiMMRr5o+aaMbynDp3OU0Jymr7c7N935wEAAHxRub8OtTHmGWNMQvHDFyVVlvSuMWa1MSa1vPd4u/hWUUpNjFf9ahU1bPpyTflymzz1rwoAAAC4ch478uEpgXLk40I55wv02Ltr9c913yihc339pX8nVQwLdj0LAADAbzk/8oGyFREWouR7u+qxn7bR4rX7NWBShvYez7n8FwIAAMCjCGofYoxR4o0t9dr90dp9NEcJyelauu2o61kAAAABjaD2QTe1raOFSXGqHhGqwa8t0xsZOzlXDQAA4AhB7aNa1KqshYlxurFNLf0+db0en7tWufmFrmcBAAAEHILah0WGh2rKkGj9/OZWejd7rwZOydSBk7muZwEAAAQUgtrHBQUZPfLj1po0uJu2HDyt3slpyt51zPUsAACAgEFQ+4lbO9TVgsQ4RYQFa+CUTM1evtv1JAAAgIBAUPuR1nUilZoYr14tovTk/HX6zcJ1Ol9Q5HoWAACAXyOo/UzViFBNH9ZdD13fXG9m7tbgqct0+HSe61kAAAB+i6D2Q8FBRk/edo1eGdRVa/edUEJymtbuPeF6FgAAgF8iqP1YQuf6mjcmVkHGaMCkpZq/cq/rSQAAAH6HoPZz7etXVWpSnK5tXE2PvLNGzyzeoIJCzlUDAACUFYI6ANSsXEEzR/TUsNimmpa+Q0OnLdfxs+ddzwIAAPALBHWACA0O0tMJ7fXigE7K2nVcvZPTtGH/KdezAAAAfB5BHWDuim6kdx7qpfzCIvWfmKH31u53PQkAAMCnEdQBqEujalo8Ll7t6ldR0lur9MKHG1VYZF3PAgAA8EkEdYCqHRmutx7sqUE9GmnC59s04o0VOnku3/UsAAAAn0NQB7AKIcF6vl8n/bFPB6VtOaI+Kenaeui061kAAAA+haCGBsc00exRMTqdm68+KRn6eP0B15MAAAB8BkENSVL3pjWUmhSvZlGVNGpmtv7x6RYVca4aAADgsghq/Ef9ahX17uhe6te1gf7+6WaNfjNbZ/IKXM8CAADwagQ1/kt4aLD+dndn/faOdvps4yH1TUnXziNnXc8CAADwWgQ1/ocxRiPim2nG8B46fCZPCclp+nzTIdezAAAAvBJBjYuKaxmlxUnxql+toh54fYUmfr5N1nKuGgAA4PsIalxSoxoRmj82Vrd3rKe/fLhR42avUs55zlUDAAB8h6DGZUWEhSh5UFf9+ta2+ue6b9R/4lLtOZbjehYAAIBXIKhRIsYYjbmhhaYP6659x3OUkJymjK1HXM8CAABwjqDGFbmhTW0tSopXVOUKGjJtuaal7eBcNQAACGgENa5Ys6hKWpAYp5vb1tYz723Qr95dq9z8QtezAAAAnCCocVUqVwjRpMHd9ItbWmneyr26Z/JSfXPynOtZAAAA5Y6gxlULCjL6xS2tNWVIN209dEa9x6dpxc5jrmcBAACUK4IapfaT9nW1MDFOkeGhGjQlU7OW7XI9CQAAoNwQ1CgTrepEamFinOJbRen/FnylJ+ev0/mCItezAAAAPI6gRpmpWjFUr93fXWNuaKHZy3fr3lczdeh0rutZAAAAHkVQo0wFBxn9+ta2Sr63q9bvP6WE8elas+eE61kAAAAeQ1DDI+7oVF/zxsQqJNjorslLNTd7r+tJAAAAHkFQw2Pa1a+i1KR4RTeprl+9u0ZPp65XfiHnqgEAgH8hqOFRNSqFacbwHhoe10yvZ+zU0NeW69jZ865nAQAAlBmCGh4XEhyk3/Vup7/d1VnZu4+r9/g0rd9/0vUsAACAMkFQo9z079ZQ7z7US4VFVv0nZih1zX7XkwAAAEqNoEa56tyomhaPi1eH+lX189mr9PwHX6uwyLqeBQAAcNUIapS7WpEV9NaDMbqvZ2NN/mK7Hnh9hU7m5LueBQAAcFUIajgRFhKkP/XtqOf6dtTSbUeUkJKmzQdPu54FAABwxQhqOHVvz8aa/WCMzuYVqm9Kuj5af8D1JAAAgCtCUMO56KY19N64eLWsXVkPzczWS59sVhHnqgEAgI8gqOEV6lYN15yHeqn/tQ31ymdbNGpmtk7ncq4aAAB4P4IaXiM8NFh/vauTft+7nZZsOqS+EzK0/fAZ17MAAAAuiaCGVzHG6IG4Zpo5ooeOnsnTnSnpWrLxkOtZAAAAF0VQwyvFtohSalK8GlWP0PA3VmjC51tlLeeqAQCA9yGo4bUa1YjQvDGxuqNTfb3w4SYlzV6lnPMFrmcBAAD8F4IaXq1iWLBeGdhFT97WVh+s+0b9JmRoz7Ec17MAAAD+g6CG1zPG6KHrW2j6Az20/8Q59U5OU/rWI65nAQAASCKo4UOub11LqUnxqh1ZQUOnLddraTs4Vw0AAJwjqOFTmkZV0vyxcbrlmtp69r0NevTdNcrNL3Q9CwAABDCCGj6ncoUQTbyvmx75cWvNX7lPd09eqv0nzrmeBQAAAhRBDZ8UFGT085tb6dWh0dp++KwSktO0Yucx17MAAEAAIqjh037cro4WJsapSnioBk3J1JuZu1xPAgAAAYaghs9rWbuyFiTG6UetovSbhV/pyfnrlFfAuWoAAFA+CGr4haoVQzX1/u5KvLGFZi/frXtfXaZDp3JdzwIAAAGAoIbfCA4yeuynbZVy77XasP+UeienadXu465nAQAAP0dQw+/8rFM9zR8bq7CQIN0zOVPvZO1xPQkAAPgxghp+6Zp6VZSaGK/uzarr8blr9XTqeuUXFrmeBQAA/BBBDb9VvVKY3nigh0bGN9PrGTs1eOoyHT2T53oWAADwMwQ1/FpIcJB+c0c7/f2ezlq954QSktP11b6TrmcBAAA/QlAjIPTt2lBzR8eqyFoNmJShRav3uZ4EAAD8BEGNgNGxYVWlJsWrU4Nqevjt1Xru/a9VWGRdzwIAAD6OoEZAqRVZQW+O7KkhMU005cvtGjZ9uU7knHc9CwAA+DCCGgEnLCRIz/bpoD/366jM7UeVkJyuTQdOu54FAAB8FEGNgDWwR2O9PaqXcvML1XdCuj786hvXkwAAgA8iqBHQujWprsXj4tW6TqRGv7lSf/t4k4o4Vw0AAK4AQY2AV6dKuOY8FKO7oxtq/L+26sEZWTqVm+96FgAA8BEENSCpQkiw/tK/k565s72+2HxYfVLSte3wGdezAACADyCogWLGGA3t1VRvjuypkzn56pOcrs++Puh6FgAA8HIENXCBmOY1lTouXo1rRmjkjCwl/2uLrOVcNQAA+GEeD2pjTLAxZpUx5r0feK6CMWaOMWarMWaZMaapp/cAJdGgWkXNHR2rhM719dePN2vsrJU6m1fgehYAAPBC5XGH+mFJX1/kuRGSjltrW0r6u6S/lMMeoEQqhgXr5Xu66P9uv0YfrT+gfhMytOvoWdezAACAl/FoUBtjGkr6maSpF7nkTklvFH8+V9LNxhjjyU3AlTDG6MHrmuuN4T104FSuEpLT9e8th13PAgAAXsTTd6hflvS4pKKLPN9A0h5JstYWSDopqeaFFxljRhljsowxWYcPEzMofz9qVUuLk+JVt0q47p+2XK9+uZ1z1QAAQJIHg9oYc4ekQ9ba7Etd9gN/9j+VYq2dYq2NttZG16pVq8w2Aleicc0IzR8bq5+2r6s/vf+1fjlntXLzC13PAgAAjnnyDnWcpARjzE5Jb0u6yRjz5gXX7JXUSJKMMSGSqko65sFNQKlUqhCiCfddq1/9pLUWrdmvAZMytO/EOdezAACAQx4Lamvtk9bahtbappIGSvqXtXbwBZelSrq/+PMBxdfw7+jwasYYJd3USlOHRmvXkRwljE/Tsu1HXc8CAACOlPvrUBtjnjHGJBQ/fE1STWPMVkmPSHqivPcAV+vma+poYVKcqkaE6r6pyzRj6U7OVQMAEICMrwVAdHS0zcrKcj0D+I9Tufn65dur9dnGQ7onupGe6dNeFUKCXc8CAAClZIzJttZGX+463ikRKKUq4aF6dWi0xt3UUnOy9mjglEwdPJXrehYAACgnBDVQBoKCjB79SRtNvO9abTpwWneMT1P2ruOuZwEAgHJAUANl6LaO9bRgbJwqhgZr4JSlmrNit+tJAADAwwhqoIy1qRup1KQ4xTSvqV/PW6ffLvxK+YUXe28jAADg6whqwAOqRYRp+rDuGnVdc83M3KX7pi7TkTN5rmcBAAAPIKgBDwkJDtJTt1+jfwzsojV7TihhfJrW7T3pehYAAChjBDXgYXd2aaB5Y2JljNGASRlauGqf60kAAKAMEdRAOejQoKpSk+LUpVE1/WLOav3pnxtUwLlqAAD8AkENlJOalSvozZE9NSy2qV799w498PoKncg573oWAAAoJYIaKEehwUF6OqG9XhjQScu2H1NCcro2HjjlehYAACgFghpw4O7oRprzUIzyCgrVb0KGPlj3jetJAADgKhHUgCNdG1fX4qR4ta0bqTGzVuqvH21SUZF1PQsAAFwhghpwqHaVcM0eFaOB3RspeclWjZyRpVO5+a5nAQCAK0BQA45VCAnW8/066tk+HfTl5sPqk5KurYfOuJ4FAABKiKAGvIAxRkNimuitB2N06ly++qSk69MNB13PAgAAJUBQA16kR7MaSk2KV7OoSho5I0uvfLaFc9UAAHg5ghrwMvWrVdS7o3upb9cGeumTzRo7a6XO5BW4ngUAAC6CoAa8UHhosF66u7N+87Nr9PGGA+o3IV07j5x1PQsAAPwAghrwUsYYjfxRc80Y3lOHTucpITlNX2w+7HoWAAC4AEENeLn4VlFKTYxX/WoV9cD05Zr8xTZZy7lqAAC8BUEN+IDGNSM0f2ysbutQT89/sFEPv71a584Xup4FAABEUAM+IyIsRMn3dtVjP22jxWv3q//EDO09nuN6FgAAAY+gBnyIMUaJN7bUa/dHa8+xHCUkp2vptqOuZwEAENAIasAH3dS2jhYmxal6RKgGv7ZMr6fv4Fw1AACOENSAj2pRq7IWJsbpxja19fTiDXps7lrl5nOuGgCA8kZQAz4sMjxUU4Z008M3t9Lc7L26Z0qmDpzMdT0LAICAQlADPi4oyOiXP26tyUO6aevB0+qdnKbsXcdczwIAIGAQ1ICf+Gn7ulqQGKdKYcEaOCVTs5fvdj0JAICAQFADfqR1nUgtSoxXbIsoPTl/nX6zcJ3OFxS5ngUAgF8jqAE/UzUiVNOGddfo61vozczdum9qpg6fznM9CwAAv0VQA34oOMjoidva6pVBXbVu30klJKdp7d4TrmcBAOCXCGrAjyV0rq95Y2IVZIwGTFqqedl7XU8CAMDvENSAn2tfv6oWj4tXt8bV9ei7a/TM4g0qKORcNQAAZYWgBgJAjUphmjGih4bFNtW09B0aOm25jp0973oWAAB+gaAGAkRocJCeTmivFwd0Utau40pITtOG/adczwIAwOcR1ECAuSu6kd55qJcKCq36T8zQe2v3u54EAIBPI6iBANSlUTWljotTu/pVlPTWKv3lw40qLLKuZwEA4JMIaiBA1Y4M1+wHYzSoR2NN/HybRryxQifP5bueBQCAzyGogQAWFhKk5/t11J/6dlDaliPqk5KuLQdPu54FAIBPIagB6L6eTTR7VIxO5xao74QMfbz+gOtJAAD4DIIagCSpe9MaWjwuTs1rVdKomdl6+dPNKuJcNQAAl0VQA/iPelUr6p2Heqn/tQ318qdbNPrNbJ3JK3A9CwAAr0ZQA/gv4aHB+utdnfS7O9rps42H1DclXTuPnHU9CwAAr0VQA/gfxhgNj2+mmSN66MiZPCUkp+nzTYdczwIAwCsR1AAuKrZFlFKT4tWgeoQeeH2FJn6+TdZyrhoAgO8jqAFcUqMaEZo3ppd+1rGe/vLhRo2bvUo55zlXDQDAdwhqAJcVERai8YO66onb2uqf675R/4lLtedYjutZAAB4BYIaQIkYYzT6+haaPqy79h3PUUJymjK2HnE9CwAA5whqAFfkhja1tSgpXlGVK2jItOWalraDc9UAgIBGUAO4Ys2iKmlBYpxubltbz7y3Qb96d61y8wtdzwIAwAmCGsBVqVwhRJMGd9Mvb2mteSv36p7JS/XNyXOuZwEAUO4IagBXLSjI6OFbWmnKkG7aeuiMeo9PV9bOY65nAQBQrghqAKX2k/Z1tTAxTpHhIRr0aqZmLdvlehIAAOWGoAZQJlrVidTCxDjFtYzS/y34Sk8tWKfzBUWuZwEA4HEENYAyU7ViqF67v7vG3tBCby3brXtfzdSh07muZwEA4FEENYAyFRxk9PitbZV8b1et339KCePTtWbPCdezAADwGIIagEfc0am+5o2JVUiw0V2Tl2pu9l7XkwAA8AiCGoDHtKtfRYuT4hXdpLp+9e4aPZ26XvmFnKsGAPgXghqAR1WvFKYZw3toRHwzvZ6xU0NfW65jZ8+7ngUAQJkhqAF4XEhwkH57Rzv97a7Oyt59XL3Hp2n9/pOuZwEAUCYIagDlpn+3hpo7upeKrFX/iRlKXbPf9SQAAEqNoAZQrjo1rKbUpHh1bFBVP5+9Ss9/8LUKi6zrWQAAXDWCGkC5qxVZQbNGxui+no01+YvteuD1FTqZk+96FgAAV4WgBuBEWEiQ/tS3o57v11FLtx1RQkqaNh887XoWAABXjKAG4NSgHo319qgY5ZwvVN+UdH341QHXkwAAuCIENQDnujWpocVJ8WpZJ1Kj38zWS59sVhHnqgEAPoKgBuAV6lYN15xRMRrQraFe+WyLRs3M1ulczlUDALwfQQ3Aa4SHBuvFAZ30h4T2WrLpkPqkpGv74TOuZwEAcEkENQCvYozR/bFN9eaInjqek687U9K1ZOMh17MAALgoghqAV+rVoqZSk+LUuEaEhr+xQilLtspazlUDALwPQQ3AazWsHqG5o2PVu1N9vfjRJiW9tUo55wtczwIA4L8Q1AC8WsWwYP1jYBc9dXtbffDVN+o3IUN7juW4ngUAwH8Q1AC8njFGo65roekP9ND+E+fUOzlN6VuPuJ4FAIAkDwa1MSbcGLPcGLPGGLPeGPOHH7imsTFmiTFmlTFmrTHmdk/tAeD7rm9dS6lJ8aodWUFDpy3Xa2k7OFcNAHDOk3eo8yTdZK3tLKmLpFuNMTEXXPMbSe9Ya7tKGihpggf3APADTaMqaf7YOP34mjp69r0NevSdNcrNL3Q9CwAQwDwW1PZb372AbGjxx4W3kqykKsWfV5W031N7APiPyhVCNOG+a/Xoj1tr/qp9umvSUu0/cc71LABAgPLoGWpjTLAxZrWkQ5I+sdYuu+CSpyUNNsbslfS+pHGe3APAfwQFGY27uZWmDo3WjiNnlZCcpuU7jrmeBQAIQB4NamttobW2i6SGknoYYzpccMkgSa9baxtKul3STGPM/2wyxowyxmQZY7IOHz7syckAfMwt7epoYWKcqoSH6t5XMzUzcxfnqgEA5apcXuXDWntC0ueSbr3gqRGS3im+ZqmkcElRP/D1U6y10dba6Fq1anl4LQBf07J2ZS1MitN1rWvptwu/0lML1imvgHPVAIDy4clX+ahljKlW/HlFSbdI2njBZbsl3Vx8zTX6Nqi5BQ3gilUJD9WrQ6OVdGNLzV6+R4OmZOrQqVzXswAAAcCTd6jrSVpijFkraYW+PUP9njHmGWNMQvE1j0p60BizRtJsScMs/1YL4CoFBxn96qdtNOG+a7XxwGn1Tk7Tqt3HXc8CAPg542v9Gh0dbbOyslzPAODlNh44pQdnZOngyTz9sW8H3R3dyPUkAICPMcZkW2ujL3cd75QIwC+1rVtFqYnx6tGshh6fu1a/X/SV8guLXM8CAPghghqA36peKUyvP9BdD/6omd5YukuDpy7T0TN5rmcBAPwMQQ3Ar4UEB+n/ftZOf7+ns1bvOaGE5HR9te+k61kAAD9CUAMICH27NtTc0bEqslYDJmVo0ep9ricBAPwEQQ0gYHRsWFWpSfHq1KCaHn57tZ57/2sVcK4aAFBKBDWAgFIrsoLeHNlTQ2KaaMqX2/XA6yt0Iue861kAAB9GUAMIOGEhQXq2Twf9uV9HZW4/qoTkdG08cMr1LACAjyKoAQSsgT0a6+1RvZSbX6h+EzL0wbpvXE8CAPggghpAQOvWpLoWj4tX6zqRGjNrpf728SYVFfnWG14BANwiqAEEvDpVwjXnoRjdHd1Q4/+1VQ/OyNKp3HzXswAAPoKgBgBJFUKC9Zf+nfTsne31xebD6pOSrm2Hz7ieBQDwAQQ1ABQzxmhIr6aaNbKnTubkq09yuv618aDrWQAAL0dQA8AFejavqdRx8WoSFaERb2Qp+V9bZC3nqgEAP4ygBoAf0KBaRc0dHas7O9fXXz/erLGzVupsXoHrWQAAL0RQA8BFhIcG6+/3dNFvfnaNPlp/QP0mZGjX0bOuZwEAvAxBDQCXYIzRyB8114zhPXXwdK4SktP17y2HXc8CAHgRghoASiC+VZRSE+NVr2q47p+2XK9+uZ1z1QAASQQ1AJRY45oRmjcmVrd2qKs/vf+1fjlntXLzC13PAgA4RlADwBWoVCFEKfdeq8d+2kaL1uzXgEkZ2nfinOtZAACHCGoAuELGGCXe2FKv3R+tXUdylDA+TZnbj7qeBQBwhKAGgKt0U9s6WpgUp2oRoRo8dZlmLN3JuWoACEAENQCUQotalbUgMU43tKml3y1ar1/PW6u8As5VA0AgIagBoJSqhIdqypBo/fymlnona6/umZypg6dyXc8CAJQTghoAykBQkNEjP2mjSYOv1eaDp3XH+DRl7zruehYAoBwQ1ABQhm7tUE8LxsapYmiwBk5ZqreX73Y9CQDgYQQ1AJSxNnUjlZoUp5jmNfXE/HX67cKvdL6gyPUsAICHENQA4AHVIsI0fVh3jbquuWZm7tLgqct05Eye61kAAA8gqAHAQ0KCg/TU7dfoHwO7aM3eE+o9Pk3r9p50PQsAUMYuG9TmW4ONMb8rftzYGNPD89MAwD/c2aWB5o2JVZAxGjApQwtW7XU9CQBQhkpyh3qCpF6SBhU/Pi0pxWOLAMAPdWhQVYuS4tSlUTX9cs4a/fG9DSoo5Fw1APiDkgR1T2ttoqRcSbLWHpcU5tFVAOCHoipX0Jsje2pYbFNNTdueG/hUAAAgAElEQVSh+6cv1/Gz513PAgCUUkmCOt8YEyzJSpIxppYkbqsAwFUIDQ7S0wnt9cKATlqx47gSUtL09TenXM8CAJRCSYL6FUkLJNU2xvxJUpqk5zy6CgD83N3RjTTnoRidLyhSvwkZen/dN64nAQCu0mWD2lo7S9Ljkp6X9I2kPtbadz09DAD8XdfG1bU4KV7X1IvU2Fkr9eJHG1VYZF3PAgBcoZK8ykeMpH3W2hRrbbKkvcaYnp6fBgD+r3aVcM0eFaNBPRopZck2PTgjS6dy813PAgBcgZIc+Zgo6cz3Hp8t/jMAQBmoEBKs5/p21LN9OujLzYfVJzldWw+dufwXAgC8QkmC2lhr//NvkNbaIkkhnpsEAIHHGKMhMU301oMxOpWbrz4p6fp0w0HXswAAJVCSoN5ujPm5MSa0+ONhSds9PQwAAlGPZjWUmhSvZlGVNHJGll75bIuKOFcNAF6tJEE9WlKspH2S9krqKWmUJ0cBQCCrX62i3h3dS/26NtBLn2zWmFnZOpNX4HoWAOAizPdOc/iE6Ohom5WV5XoGAHictVbT0nfqufe/VvOoSnp1aLSaRlVyPQsAAoYxJttaG3256y57Frr4jVwelNT0+9dba4eXZiAA4NKMMRoR30xt60Yq8a2VSkhO0/h7r9X1rWu5ngYA+J6SHPlYJKmqpE8l/fN7HwCAchDXMkqLk+JVv1pFPTB9uSZ9sU2+9q+LAODPSvJqHRHW2l97fAkA4KIa1YjQ/LGxemzuWv35g41av/+UXujfSRXDgl1PA4CAV5I71O8ZY273+BIAwCVFhIUoeVBXPX5rG723dr/6T8zQnmM5rmcBQMArSVA/rG+j+pwx5pQx5rQx5pSnhwEA/pcxRmNvaKlpw7prz/Ec3ZmSroxtR1zPAoCAdtmgttZGWmuDrLUVrbVVih9XKY9xAIAfdmOb2lqUGKcalcI05LXlmp6+g3PVAOBISe5QyxhT3RjTwxhz3Xcfnh4GALi05rUqa8HYWN3Yprb+sHiDHpu7Vrn5ha5nAUDAuWxQG2NGSvpS0keS/lD836c9OwsAUBKR4aGaMqSbHr65leZm79U9UzJ14GSu61kAEFBKeoa6u6Rd1tobJXWVdNijqwAAJRYUZPTLH7fW5CHdtPXgafVOTlP2rmOuZwFAwChJUOdaa3MlyRhTwVq7UVIbz84CAFypn7avqwWJcaoUFqyBUzI1e/lu15MAICCUJKj3GmOqSVoo6RNjzCJJ+z07CwBwNVrXidSixHjFtojSk/PX6TcL1+l8QZHrWQDg18yV/Fa4MeZ6ffuuiR9Ya/M9tuoSoqOjbVZWlosfDQA+o7DI6sWPNmnSF9vUvWl1Tbivm2pFVnA9CwB8ijEm21obfbnrSvJLiTO/+9xa+4W1NlXStFLuAwB4UHCQ0RO3tdUrg7pq3b6T6j0+TWv3nnA9CwD8UkmOfLT//gNjTLCkbp6ZAwAoSwmd62vemFgFBxkNmLRU87L3up4EAH7nokFtjHnSGHNaUqfid0g8Vfz4kKRF5bYQAFAq7etX1eJx8erWuLoefXeNnlm8QQWFnKsGgLJy0aC21j5vrY2U9GLxOyR+9y6JNa21T5bjRgBAKdWoFKYZI3poWGxTTUvfoaHTluvY2fOuZwGAXyjJkY/3jDGVJMkYM9gY85IxpomHdwEAylhocJCeTmivFwd0Utau40pITtOG/adczwIAn1eSoJ4oKccY01nS45J2SZrh0VUAAI+5K7qR3nmolwoKrfpNTNfiNbwSKgCURkmCusB++9p6d0r6h7X2H5IiPTsLAOBJXRpVU+q4OLWvX1XjZq/SXz7cqMKikr+MKgDg/ytJUJ82xjwpabCkfxa/ykeoZ2cBADytdmS4Zj8Yo0E9Gmvi59s04o0VOnnOyVsMAIBPK0lQ3yMpT9IIa+0BSQ0kvejRVQCAchEWEqTn+3XUn/p2UPrWI+qTkq4tB0+7ngUAPuWyQW2tPWCtfcla++/ix7uttZyhBgA/cl/PJnrrwRidzi1Qn5R0fbz+gOtJAOAzLvU61GnF/z39vdehPvXd4/KbCAAoD92b1tDicXFqWbuyRs3M1sufblYR56oB4LIu9TrU8cX/jfze61B/91rUVcpvIgCgvNSrWlFzHuql/tc21MufbtHoN7N1Jq/A9SwA8GqXPfJhjOlojLmr+KP95a4HAPi28NBg/fWuTvrdHe302cZD6puSrh1HzrqeBQBe61JHPqoaYz7Xt28zfq+k+ySlGmOWGGO4Qw0AfswYo+HxzTRzeA8dOZOnhOQ0Ldl0yPUsAPBKl7pD/aykLEktrbV9rbV9JLWStELSn8pjHADArdiWUUpNilfD6hEa/voKTfh8q759awIAwHcuFdS3SHrCWlv03R8Uf/5U8XMAgADQqEaE5o3ppZ91rKcXPtykpNmrlHOec9UA8J1LBfV5a+3//C9m8Z/leW4SAMDbRISFaPygrvr1rW31/rpv1H/iUu05luN6FgB4hUsFdbgxpqsx5toLPrpJqlBeAwEA3sEYozE3tND0Yd2173iOEpLTlLH1iOtZAOCcudhZOGPMkkt9obX2Ro8suozo6GiblZXl4kcDAIrtOHJWo2ZkafuRs3rq9ms0PK6pjDGuZwFAmTLGZFtroy93XcjFnnAVzAAA79csqpIWJMbpkTmr9ex7G7R+/0k917ejwkODXU8DgHJ32dehBgDgh1SuEKJJg7vpl7e01vyV+3T35KXaf+Kc61kAUO4IagDAVQsKMnr4llZ6dWi0th8+q4TkNK3Yecz1LAAoVx4LamNMuDFmuTFmjTFmvTHmDxe57m5jzIbia97y1B4AgOf8uF0dLUyMVWR4qAZNydSbmbtcTwKAcnOpd0psYoyp+r3HNxpj/mGMecQYE1aC750n6SZrbWdJXSTdaoyJueBntJL0pKQ4a217Sb+4qr8FAMC5lrUjtTAxTvGtovSbhV/pyfnrdL6g6PJfCAA+7lJ3qN+RVEmSjDFdJL0rabekzpImXO4b22+dKX4YWvxx4UuKPCgpxVp7vPhreF9bAPBhVSuG6rX7u2vsDS00e/luDXo1U4dO5bqeBQAedamgrmit3V/8+WBJ06y1f5P0gKQeJfnmxphgY8xqSYckfWKtXXbBJa0ltTbGpBtjMo0xt17k+4wyxmQZY7IOHz5ckh8NAHAkOMjo8VvbKvnertqw/5R6J6dp9Z4TrmcBgMdcKqi//4KiN0n6TPrP24+XiLW20FrbRVJDST2MMR0uuCREUitJN0gaJGmqMabaD3yfKdbaaGttdK1atUr64wEADt3Rqb7mjYlVaHCQ7p68VHOz97qeBAAecamgXmKMeccY84qk6pL+JUnGmHqSzl/JD7HWnpD0uaQL70DvlbTIWptvrd0haZO+DWwAgB9oV7+KFifFK7pJdf3q3TV6OnW98gs5Vw3Av1w0qK21P5c0X9J2fftLg/nFT9WR9NTlvrExptZ3d5uNMRUl3SJp4wWXLZR0Y/E1Ufr2CMj2K/w7AAC8WPVKYZoxvIeGxzXT6xk7NfS15Tp29oruywCAV7vUq3ycljRF0rOSNhpjThljTkn6t6S3is8833yJ711P397lXitphb49Q/2eMeYZY0xC8TUfSTpqjNkgaYmkx6y1R8vg7wUA8CIhwUH6Xe92+ttdnZW9+7h6j0/T+v0nXc8CgDJhrL3whTdK8EXGBEvqIGmWtfbCc9EeFR0dbbOyssrzRwIAytDavSf00MxsHc85rxcGdFZC5/quJwHADzLGZFtroy933VW9sUvxLxuukTT+ar4eABC4OjWsptSkeHVsUFU/n71Kz3/wtQqLrvzmDgB4i1K9U6K1dnJZDQEABI5akRU0a2SMBsc01uQvtuuB11foZE7+5b8QALyQx956HACASwkLCdIf+3TU8/06aum2I0pISdPmg6ddzwKAK0ZQAwCcGtSjsd4eFaOc84Xqk5KuD7864HoSAFwRghoA4Fy3JjW0OClerepEavSb2Xrpk80q4lw1AB9BUAMAvELdquGaMypGd3VrqFc+26JRM7N0Opdz1QC8H0ENAPAa4aHBemFAJ/0hob2WbDqsPinp2nb4jOtZAHBJBDUAwKsYY3R/bFO9OaKnjufkq09yuv618aDrWQBwUQQ1AMAr9WpRU6lJcWpcM0Ij3shSypKtupo3IwMATyOoAQBeq2H1CM0dHavenerrxY82KfGtlTqbV+B6FgD8F4IaAODVKoYF6x8Du+ip29vqw68OqP/EDO0+muN6FgD8B0ENAPB6xhiNuq6FXn+gh745mauElDSlbTniehYASCKoAQA+5LrWtZSaFKfakRU0dNoyTf33ds5VA3COoAYA+JQmNStp/tg4/aRdXf3xn1/rkXfWKDe/0PUsAAGMoAYA+JzKFUI04b5r9eiPW2vBqn0aMClD+06ccz0LQIAiqAEAPikoyGjcza00dWi0dh7JUcL4NC3bftT1LAABiKAGAPi0W9rV0cLEOFWtGKr7pi7TjKU7OVcNoFwR1AAAn9eydmUtTIrTda1r6XeL1uuJeeuUV8C5agDlg6AGAPiFKuGhmjo0Wkk3ttScrD0aNCVTh07lup4FIAAQ1AAAvxEUZPSrn7bRhPuu1cYDp3XH+DSt3H3c9SwAfo6gBgD4nds71tP8sbEKDw3WwMmZemfFHteTAPgxghoA4Jfa1q2i1KQ49WxeQ4/PW6vfL/pK+YVFrmcB8EMENQDAb1WLCNP0Yd016rrmemPpLg2eukxHz+S5ngXAzxDUAAC/FhIcpKduv0Yv39NFq/ecUEJyur7ad9L1LAB+hKAGAASEPl0baN6YWFlr1X9ihhat3ud6EgA/QVADAAJGhwZVlTouXp0bVdPDb6/Wc+9/rQLOVQMoJYIaABBQoipX0KyRPTW0VxNN+XK7Hnh9hU7knHc9C4API6gBAAEnNDhIz9zZQS/076Rl248pITldGw+ccj0LgI8iqAEAAevu7o309kMxys0vVL8JGfpg3TeuJwHwQQQ1ACCgXdu4uhaPi1ebupEaM2ul/vrRJhUVWdezAPgQghoAEPDqVAnX26NidE90IyUv2aqRM7J0Kjff9SwAPoKgBgBAUoWQYP25f0c9e2d7fbn5sPqkpGvroTOuZwHwAQQ1AADFjDEa0qupZo3sqZM5+eqbkq7Pvj7oehYAL0dQAwBwgZ7Nayp1XLyaREVo5Iwsjf9sC+eqAVwUQQ0AwA9oUK2i5o6OVZ8uDfS3TzZr7KyVOptX4HoWAC9EUAMAcBHhocF66e7O+s3PrtHHGw6o34QM7Tp61vUsAF6GoAYA4BKMMRr5o+aaMbynDp7OVUJyuv695bDrWQC8CEENAEAJxLeKUmpivOpVDdf905ZrypfbZC3nqgEQ1AAAlFjjmhGaPzZWt3Wop+fe36hfzFmtc+cLXc8C4BhBDQDAFYgIC1HyvV312E/bKHXNfg2YlKG9x3NczwLgEEENAMAVMsYo8caWeu3+aO0+mqOE5HQt3XbU9SwAjhDUAABcpZva1tHCpDhVjwjVkNeW6Y2MnZyrBgIQQQ0AQCm0qFVZCxLjdEObWvp96nr9et5a5RVwrhoIJAQ1AAClVCU8VFOGROvnN7XUO1l7dc/kTB08let6FoByQlADAFAGgoKMHvlJG00afK02HzytO8anKXvXcdezAJQDghoAgDJ0a4d6WjA2ThFhwRo4ZaneXr7b9SQAHkZQAwBQxtrUjVRqYrx6tYjSE/PX6bcLv9L5giLXswB4CEENAIAHVI0I1fRh3fXQ9c01M3OXBk9dpiNn8lzPAuABBDUAAB4SHGT05G3X6B8Du2jtvhPqPT5N6/aedD0LQBkjqAEA8LA7uzTQ3NGxCjJGAyZlaMGqva4nAShDBDUAAOWgQ4OqSk2KU9fG1fTLOWv0x/c2qKCQc9WAPyCoAQAoJzUrV9DMET01LLappqbt0LDpK3T87HnXswCUEkENAEA5Cg0O0tMJ7fXCgE5avuOYElLS9PU3p1zPAlAKBDUAAA7cHd1Icx6K0fmCIvWbkKF/rv3G9SQAV4mgBgDAka6Nq2txUryuqRepxLdW6sWPNqqwyLqeBeAKEdQAADhUu0q4Zo+K0aAejZSyZJtGvrFCJ8/lu54F4AoQ1AAAOFYhJFjP9e2oP/bpoH9vOaK+Kenaeui061kASoigBgDACxhjNDimid56MEancvPVJyVDn2w46HoWgBIgqAEA8CI9mtVQalK8mkVV0oMzsvTKZ1tUxLlqwKsR1AAAeJn61Srq3dG91K9rA730yWaNmZWtM3kFrmcBuAiCGgAALxQeGqy/3d1Zv72jnT79+pD6pqRr55GzrmcB+AEENQAAXsoYoxHxzTRjeA8dPpOnhOQ0fbH5sOtZAC5AUAMA4OXiWkZpcVK86lerqAemL9fkL7bJWs5VA96CoAYAwAc0qhGh+WNjdVuHenr+g416+O3VOne+0PUsACKoAQDwGRFhIUq+t6sev7WNFq/dr/4TM7T3eI7rWUDAI6gBAPAhxhiNvaGlpg3rrj3Hc5SQnK6MbUdczwICGkENAIAPurFNbS1KjFONSmEa8tpyvZ6+g3PVgCMENQAAPqp5rcpaMDZWN7apracXb9Bjc9cqN59z1UB5I6gBAPBhkeGhmjKkmx6+uZXmZu/VPVMydeBkrutZQEAhqAEA8HFBQUa//HFrTR7STVsPntYd49OUtfOY61lAwCCoAQDwEz9tX1cLEuNUuUKwBr2aqbeW7XY9CQgIBDUAAH6kdZ1ILUqMV2yLKD21YJ3+b8E6nS8ocj0L8GsENQAAfqZqRKimDeuu0de30Kxlu3Xf1EwdPp3nehbgtzwW1MaYcGPMcmPMGmPMemPMHy5x7QBjjDXGRHtqDwAAgSQ4yOiJ29rqlUFdtW7fSfUen6Y1e064ngX4JU/eoc6TdJO1trOkLpJuNcbEXHiRMSZS0s8lLfPgFgAAAlJC5/qaNyZWwUFGd01eqnnZe11PAvyOx4LafutM8cPQ4o8fesX5ZyW9IInX+AEAwAPa16+qxePi1a1xdT367ho9s3iDCgo5Vw2UFY+eoTbGBBtjVks6JOkTa+2yC57vKqmRtfY9T+4AACDQ1agUphkjemhYbFNNS9+hodOW69jZ865nAX7Bo0FtrS201naR1FBSD2NMh++eM8YESfq7pEcv932MMaOMMVnGmKzDhw97bjAAAH4sNDhITye014sDOilr13ElJKdpw/5TrmcBPq9cXuXDWntC0ueSbv3eH0dK6iDpc2PMTkkxklJ/6BcTrbVTrLXR1troWrVqlcNiAAD8113RjfTOQ71UUGjVb2K6Fq/Z73oS4NM8+SoftYwx1Yo/ryjpFkkbv3veWnvSWhtlrW1qrW0qKVNSgrU2y1ObAADAt7o0qqbUcXFqX7+qxs1epb98uFGFRT/0q04ALseTd6jrSVpijFkraYW+PUP9njHmGWNMggd/LgAAKIHakeGa/WCMBvVorImfb9Pw11foZE6+61mAzzHW+tb/G42OjrZZWdzEBgCgLM1atktPp65Xw+oRmjKkm1rViXQ9CXDOGJNtrb3s+6TwTokAAED39Wyitx6M0encAvVJSdfH6w+4ngT4DIIaAABIkro3raHF4+LUsnZljZqZrZc/3awizlUDl0VQAwCA/6hXtaLmPNRL/a9tqJc/3aLRb2brTF6B61mAVyOoAQDAfwkPDdZf7+qk393RTp9tPKS+KenaceSs61mA1yKoAQDA/zDGaHh8M80c3kNHzuQpITlNSzYdcj0L8EoENQAAuKjYllFKTYpXw+oRGv76Ck34fKt87RXCAE8jqAEAwCU1qhGheWN66Wcd6+mFDzcpafYq5ZznXDXwHYIaAABcVkRYiMYP6qonbmur99d9o34TMrTnWI7rWYBXIKgBAECJGGM0+voWmj6su/afOKfeyWlK33rE9SzAOYIaAABckRva1FZqUrxqVa6godOW67W0HZyrRkAjqAEAwBVrGlVJCxLjdHPb2nr2vQ169N01ys0vdD0LcIKgBgAAV6VyhRBNGtxNv7ylteav3Ke7Jy/V/hPnXM8Cyh1BDQAArlpQkNHDt7TSq0Ojtf3wWSUkp2nFzmOuZwHliqAGAACl9uN2dbQwMVaR4aEaNCVTb2bucj0JKDcENQAAKBMta0dqYWKcftQqSr9Z+JWenL9OeQWcq4b/I6gBAECZqVoxVFPv766xN7TQ7OW7de+ry3ToVK7rWYBHEdQAAKBMBQcZPX5rWyXf21Ub9p9S7+Q0rd5zwvUswGMIagAA4BF3dKqv+WNjFRYSpLsnLdW7WXtcTwI8gqAGAAAec029KkpNjFf3ZtX12Ny1ejp1vfILi1zPAsoUQQ0AADyqeqUwvfFAD42Ib6bXM3ZqyGvLdPRMnutZQJkhqAEAgMeFBAfpt3e000t3d9bK3SeUkJyur/addD0LKBMENQAAKDf9rm2ouaN7qchaDZiUoUWr97meBJQaQQ0AAMpVp4bVlJoUr44Nqurht1fr+fe/VmGRdT0LuGoENQAAKHe1Iito1sgYDYlposlfbtew6ct1Iue861nAVSGoAQCAE2EhQXq2Twf9uV9HZW4/qjtT0rXpwGnXs4ArRlADAACnBvZorLdHxSjnfKH6TkjXh19943oScEUIagAA4Fy3JjW0OClerepEavSbK/XSx5tUxLlq+AiCGgAAeIW6VcM1Z1SM7urWUK/8a6tGzczS6dx817OAyyKoAQCA1wgPDdYLAzrpDwnttWTTYfVJSde2w2dczwIuiaAGAABexRij+2Ob6s0RPXU8J199ktP1r40HXc8CLoqgBgAAXqlXi5r6f+3deXxV9Z3G8eebEAh7VCKbLAoapSABgyxBrZax2NaAYAsqioogAtqO00XHzjjdrC0z47SssmjQukBRMVq31rpBIBLZEURANlG2sgdClt/8cQ9tGpNAuPfk3OXzfr14eXPyu7lPvib3PBx+yc2bkK325zTSqDmFmvLORjnHvmpEHwo1AACIWued1Ujzx/bT9Ze20cQ3P9H4Z5fpaHFp0LGAf0KhBgAAUa1h/WT9bnim/v1bF+uNNV9q6LR8bdtXFHQs4O8o1AAAIOqZmcZc2Um5d1yuLw4eV86UhVr46d6gYwGSKNQAACCGXHlRuvImZKtl01Td9kSBZn2wmX3VCByFGgAAxJQO5zTWi+P66dourfTLP63T/fNW6nhJWdCxkMAo1AAAIOY0blBPU2/pqX/7l4u0YMXnunF6vj4/cCzoWEhQFGoAABCTkpJM937jQs28NUtb9hYpZ9JCFWzeF3QsJCAKNQAAiGkDurTUgvHZat4wRbfMKtDTi7ewrxp1ikINAABiXudzm2jBhGxdeVG6/uPltXrghdUqLmVfNeoGhRoAAMSFZqkpmnVbliZc3VlzC7dr+Iwl2nXoeNCxkAAo1AAAIG4kJZl++M0MTb2lpz758rCun7RQy7btDzoW4hyFGgAAxJ1vdWutF8f1U4OUJA1/fInmLd0edCTEMQo1AACISxe3aqZXJvTX5eefrR+/sEr/+fIalZSVBx0LcYhCDQAA4lZao/rKvaOXRl9xvp5avFW3zCrQ3iPFQcdCnKFQAwCAuFYvOUkPfbuL/m9YplZuP6CcSQu15vODQcdCHKFQAwCAhDC4R1vNH9tPkjR0Wr4WLP884ESIFxRqAACQMLqd11x59/ZX93Zp+sHcFfrVnz5WKfuqESYKNQAASCgtmjTQM3f11m19O2jmB5/pjtylOlB0IuhYiGEUagAAkHBSkpP080Fd9Zuh3VSw+W/KmbxI6788FHQsxCgKNQAASFjDerXXc2P66HhJmYZMzdfrq78IOhJiEIUaAAAktMs6nKVX7u2vjFZNdc8zy/Tfb36i8nIXdCzEEAo1AABIeC2bper5MX00LKudJr+zUaOfKtSh4yVBx0KMoFADAABIalAvWY8O7aZfDPqa3tuwR4OnLNKmPUeCjoUYQKEGAADwmJlu7dtRz9zVWweLSjR48iK9vW5X0LEQ5SjUAAAAlfS+4Bzl3dtfHVo00l1PFWrS25/KOfZVo2oUagAAgCq0TWuo+WP7aVD3NvqfP2/QuGeW6WhxadCxEIUo1AAAANVITUnWY8My9dNvX6I3136pIVPztXXf0aBjIcpQqAEAAGpgZrrrigv01J299eWh48qZvEgffLon6FiIIhRqAACA09D/whZ6ZUJ/tW6eqpFPfKgZ729iXzUkUagBAABOW/tzGumFe/ppYNdWeuS19frB3BU6dqIs6FgIGIUaAACgFho3qKcpN/fUj76ZobyVO3Xj9Hzt2F8UdCwEiEINAABQS2am8Vd31uyRWdq2r0g5kxdpyeZ9QcdCQCjUAAAAZ+iai1tqwYRspTVK0YhZBZqTv4V91QmIQg0AABCGTulNtGB8tr6eka6H89bqJy+s0vES9lUnEgo1AABAmJqlpmjGrVm675rOmle4Q8NnLNGuQ8eDjoU6QqEGAACIgKQk0/3XZmj6iJ7asOuwvjNpoT7auj/oWKgDFGoAAIAIGti1tV4al61G9ZM1fMZiPffhtqAjwWcUagAAgAjLaNVUeeP7q2+nFnrwxdX66YLVOlFaHnQs+IRCDQAA4IPmjVL05O29dPdVF+gPS7ZpxKwC7TlcHHQs+IBCDQAA4JPkJNOD112i39/UQ6s+P6CcyQu1aseBoGMhwijUAAAAPsvp3kbzx/ZTkpm+O32xXly2I+hIiCAKNQAAQB3o2ra58iZkq0f7NN0/b6V+8erHKi1jX3U8oFADAADUkXOaNNDTo3rr9n4dNXvhZxr55Ifaf/RE0LEQJt8KtZmlmtmHZrbSzNaa2c+qWHO/mX1sZqvM7G0z6+BXHgAAgGiQkpyk/8r5mibeeKmWbtmv6ycv1Mc7DwUdC2Hw8wp1saRrnHPdJWVKGhrku1QAABK3SURBVGhmfSqtWS4pyzl3qaT5kn7rYx4AAICo8d2sdpp3d1+VlJVr6LR8vbpqZ9CRcIZ8K9Qu5Ij3Zor3x1Va845zrsh7c4mk8/zKAwAAEG0y26XplXv7q0ubZprw7HL99o31Kit3p74jooqve6jNLNnMVkjaLenPzrmCGpaPkvS6n3kAAACizblNU/Xs6N666fJ2mvruJo2as1QHj5UEHQu14Guhds6VOecyFbryfLmZda1qnZmNkJQlaWI17x9jZoVmVrhnzx7/AgMAAASgQb1k/XrIpfrVDV218NO9GjxlkTbuPhx0LJymOvktH865A5LelTSw8vvMbICkhyTlOOeqfPkg59wM51yWcy4rPT3d16wAAABBuaV3Bz03po8OHy/R4Cn5+vPHu4KOhNPg52/5SDezNO92Q0kDJK2vtKaHpMcVKtO7/coCAAAQK3p1PFt5E/rr/BaNNfqpQv3uL5+qnH3VUc3PK9StJb1jZqskLVVoD/WrZvZzM8vx1kyU1ETSH81shZnl+ZgHAAAgJrRJa6g/ju2rIT3a6rG/bNA9z3ykI8WlQcdCNcy52PobT1ZWlissLAw6BgAAgO+cc3pi0RY98to6dUpvrBm3Zqlji8ZBx0oYZvaRcy7rVOt4pUQAAIAoZWYa1f98PXXn5dp9uFg5kxfqvQ38goZoQ6EGAACIctmdWyhvfH+1SWuoO578UI+/t0mxtssgnlGoAQAAYkD7cxrpxXH9dF3X1vr16+v1/edX6NiJsqBjQRRqAACAmNGofj1NvrmHfvTNDL2yaqdunJ6vHfuLTn1H+IpCDQAAEEPMTOOv7qzZI7O0bV+RciYv0uJN+4KOldAo1AAAADHomotbasGEbJ3VKEUjZhdoTv4W9lUHhEINAAAQozqlN9GC8dm6OiNdD+et1U9eWKXiUvZV1zUKNQAAQAxrmpqiGbdm6b5rOmte4Q4Ne3yJdh06HnSshEKhBgAAiHFJSab7r83Q9BE9tWHXYV0/aaGWbdsfdKyEQaEGAACIEwO7ttZL47KVmpKs4Y8v0dyl24KOlBAo1AAAAHEko1VT5U3IVu8LztZPXlith19eo5Ky8qBjxTUKNQAAQJxJa1RfT97eS6OvOF9zFm/ViFkF2nekOOhYcYtCDQAAEIfqJSfpoW930WPDumvF9gPKmbxIa3ceDDpWXKJQAwAAxLEbepyn+WP7qdw5DZ2Wr7yVO4OOFHco1AAAAHGu23nNlTehv7q1ba77nluuR19fr7JyXgQmUijUAAAACSC9aQM9c1cfjejTXtPf26RRc5bq4LGSoGPFBQo1AABAgqhfL0m/HNxNj9zQTYs27tXgKYu0cffhoGPFPAo1AABAgrm5d3s9O7qPDh8v0eAp+Xp73a6gI8U0CjUAAEAC6tXxbOVN6K+OLRrprqcKNeWdjXKOfdVngkINAACQoNqkNdQf7+6nnO5tNPHNTzTh2eUqOlEadKyYQ6EGAABIYA3rJ+v/hmXqwesu1utrvtDQaYu1Y39R0LFiCoUaAAAgwZmZ7r6qk564vZd27C9SzuRFKti8L+hYMYNCDQAAAEnS1zPO1YLx2UprlKJbZhXoD0u2Bh0pJlCoAQAA8Hed0ptowfhsXXFhC/10wRo99NJqnSgtDzpWVKNQAwAA4J80S03RrJG9NPaqTnqmYJtGzC7QviPFQceKWhRqAAAAfEVykumB6y7W74ZnauX2A8qZvEjrvjgUdKyoRKEGAABAtQZlttW8u/uqtLxcQ6fl6621XwYdKepQqAEAAFCj7u3SlDehvy48t4nGPP2RJv/1U14EpgIKNQAAAE6pZbNUzb27rwZlttF/v7VB9z2/QsdLyoKOFRXqBR0AAAAAsSE1JfQiMBmtmmrim59oy96jmnlbllo1Tw06WqC4Qg0AAIDTZmYa9/XOmnlrljbvOaJBUxZqzecHg44VKAo1AAAAam1Al5aaf08/1UtK0nenL9Yba74IOlJgKNQAAAA4I5e0bqYF47N1ceumGvuHZZr67saE/GFFCjUAAADOWHrTBnpudB/ldG+j377xif7tjytVXJpYP6zIDyUCAAAgLKkpyfrd8Ex1Sm+ix/6yQdv/VqTHb83S2Y3rBx2tTnCFGgAAAGEzM31/wIWadFMPrdpxUEOmLtKWvUeDjlUnKNQAAACImOu7t9Gzo/vo4LESDZmWr+Xb9gcdyXcUagAAAETUZR3O0ovjstU0tZ5umrkk7l+unEINAACAiDu/RWO9cE8/ZbRqprv/8JHm5G8JOpJvKNQAAADwRYsmDfT86D4acElLPZy3Vo+8tk7l5fH3a/Uo1AAAAPBNw/rJmj7iMt3Wt4NmvL9ZP5i7QiVl5UHHiih+bR4AAAB8lZxk+lnO19S6eUP95o31KjpRqsk391RqSnLQ0SKCK9QAAADwnZnpnq930i8Gd9Xb63frztylOlpcGnSsiKBQAwAAoM7c2qeD/vd73VXw2d80YnaBDhaVBB0pbBRqAAAA1KkbepynKTf31NrPD2n4zCXae6Q46EhhoVADAACgzg3s2kqzRmbps71H9L3pi7XzwLGgI50xCjUAAAACceVF6Xp6VG/tOVysYTMWa9eh40FHOiMUagAAAASmV8ez9fRdvbXvyAndNvtDHSg6EXSkWqNQAwAAIFCZ7dI087Ysfbb3qO7IXaqiE7H12z8o1AAAAAhcducW+v1NPbRy+wHd/fRHKi4tCzrSaaNQAwAAICoM7NpKjw65VB98ulf3z12pshh5mXJeKREAAABR43u92ungsRL96rV1atYwRY/c0FVmFnSsGlGoAQAAEFVGX3mBDhw7oSnvbNJZjVL044EXBx2pRmz5AAAAQNT54bUZurl3ez2/dLv2HI7uF37hCjUAAACijpnpF4O6avzVnZXetEHQcWrEFWoAAABEpeQkU9u0hkHHOCUKNQAAABAGCjUAAAAQBgo1AAAAEAYKNQAAABAGCjUAAAAQBgo1AAAAEAYKNQAAABAGCjUAAAAQBgo1AAAAEAYKNQAAABAGCjUAAAAQBgo1AAAAEAYKNQAAABAGCjUAAAAQBgo1AAAAEAYKNQAAABAGCjUAAAAQBgo1AAAAEAbfCrWZpZrZh2a20szWmtnPqljTwMzmmtlGMysws45+5QEAAAD84OcV6mJJ1zjnukvKlDTQzPpUWjNK0n7nXGdJj0n6jY95AAAAgIjzrVC7kCPemyneH1dp2SBJc7zb8yV9w8zMr0wAAABApPm6h9rMks1shaTdkv7snCuotKStpO2S5JwrlXRQ0jlVfJwxZlZoZoV79uzxMzIAAABQK/X8/ODOuTJJmWaWJuklM+vqnFtTYUlVV6MrX8WWc26GpBmSZGZ7zGyrL4HjQwtJe4MOEUeYZ2Qxz8hinpHFPCOLeUYW84ys051nh9P5YL4W6pOccwfM7F1JAyVVLNQ7JLWTtMPM6klqLulvp/hY6X7ljAdmVuicywo6R7xgnpHFPCOLeUYW84ws5hlZzDOyIj1PP3/LR7p3ZVpm1lDSAEnrKy3LkzTSu32jpL86575yhRoAAACIVn5eoW4taY6ZJStU3Oc55141s59LKnTO5UmaLelpM9uo0JXp4T7mAQAAACLOt0LtnFslqUcVx/+zwu3jkr7rV4YENSPoAHGGeUYW84ws5hlZzDOymGdkMc/Iiug8jR0WAAAAwJnjpccBAACAMFCoAQAAgDBQqAEAAIAwUKgTgJkNNrOZZvaymV3rHWtvZnlm9oSZPRB0xlhS1Ty9443N7CMz+06Q+WJNNV+fjc1sjnf8lqAzxhIzu8DMZpvZ/ArHkszsV2Y2ycxG1nR//LNq5lnlcwBOH+egyOMcFJ5wzzsU6ijnPdnsNrM1lY4PNLNPzGzjqZ6MnHMLnHOjJd0uaZh3+CJJf3LO3Smpix/Zo5GP85Skn0iaF/HQUczHeQ6RNN87nuNH9mgUoXluds6NqnR4kKS2kkoUekGthODXPGt4DkgIkZirEvQcVJUIzVNKwHPQqdRytmGddyjU0S9XoVeY/Dvvd3tPkXSdQk9EN5lZFzPrZmavVvpzboW7/tS7nyQtlzTczP4q6R3fP4vokSsf5mlmAyR9LGlXXXwSUSRX/nx9nidpu3e7zNfPILrkKnLzrChD0mLn3P2S7vExf7TJlT/zPKni12wiyVX4c03Uc1BVchXmPBP4HHQquTrN2SrM806dvPQ4zpxz7n0z61jp8OWSNjrnNkuSmT0vaZBz7teSvvJPPWZmkh6V9Lpzbpl3+A5JD3sff76kJ336FKKKj/O8WlJjhb45j5nZa865cn8+i+jh4zx3KPTktkIJ9Bf/SMyzGjsknfBuJ8xfUPyaZzVfswkjQt/3P1QCnoOqEqF5JuQ56FRqM1uFed5JmBNVnGmrf/wtSgp9EbStYf29Cr30+41mNtY79oak+8xsuqQtfoSMIWHP0zn3kHPuB5KelTQzwZ/IIvH1+aKkoWY2TdIrvqSMHbWap5md431f9zCzB73DL0r6pplNkvS+b0ljQyTmWdXXbKKr7fc956Ca1WqenINqpbrZhnXe4Qp1bLIqjlX7Cj3Oud9L+n2lY2sk3RjhXLEq7HlWeF9uhDLFskh8fR5V6F9RUPt57pM0ttKxIkmV91UnqkjMs9rngARW27lyDqpZreb59wWcg05HlbMN97zDFerYtENSuwpvnydpZ0BZ4gHzjCzmGVnMM7KYpz+Ya2QxT//4MlsKdWxaKulCMzvfzOpLGi4pL+BMsYx5RhbzjCzmGVnM0x/MNbKYp398mS2FOsqZ2XOSFkvKMLMdZjbKOVcqaYKkNyWtkzTPObc2yJyxgnlGFvOMLOYZWczTH8w1spinf+pytubcKbfkAAAAAKgGV6gBAACAMFCoAQAAgDBQqAEAAIAwUKgBAACAMFCoAQAAgDBQqAEAAIAwUKgBoAIze8jM1prZKjNbYWa9fXysjmZ2c4W3bzezydWsfc3M0iL0mMe8z+1jM5tuZoGfC8wszczGBZ0DAM5E4E+iABAtzKyvpO9I6umcu1TSAEnbfXzIjpJuPtUiSXLOfcs5dyBCj7vJOZcp6VJJXSQNPp07WYhf5400SbUq1D7nAYDTxhMRAPxDa0l7nXPFkuSc2+uc2ylJZrbFzB4xs8VmVmhmPc3sTTPbZGZjvTVmZhPNbI2ZrTazYTUdl/SopCu8q8X/6h1rY2ZvmNmnZvbbk8G8x2/hXWFeZ2YzvSvpb5lZQ29NL+/K+uKTj1fTJ+u9Yli+pM5m1sTM3jazZV7GQd7HPPl4UyUtk9TOzKZ5M1hrZj+rlLHGGXnrfmRmS72sJ+//qKRO3iwmVreuqjy1+18MAJFHoQaAf3hLocK4wcymmtlVld6/3TnXV9IHknIl3Sipj6Sfe+8fIilTUneFrm5PNLPWNRx/QNIHzrlM59xj3sfIlDRMUjdJw8ysqsJ4oaQpzrmvSTogaah3/ElJY72MZaf6ZM2skaRvSFot6bikG5xzPSVdLel/zMy8pRmSnnLO9XDObZX0kHMuS6Er3FeZ2aWnOyMzu9bLf7n3uV5mZld6s9jkzeJHNayrKg8ABKpe0AEAIFo4546Y2WWSrlCoVM41swecc7nekjzvv6slNXHOHZZ02MyOe/ub+0t6zjlXJmmXmb0nqVcNxw9VEeNt59xBSTKzjyV10Fe3nXzmnFvh3f5IUkfv8Zs65/K9488qtH2lKp3MbIUkJ+ll59zrZpYi6RGvtJZLaiuppbd+q3NuSYX7f8/Mxih0Dmmt0LaRVac5o2u9P8u9dU0UKs7bKmWsaV3lPAAQKAo1AFTgld53Jb1rZqsljVToSqskFXv/La9w++Tb9SSZqlbd8apU/Lhlqvp5uvKahrV8jJN7qCu6RVK6pMuccyVmtkVSqve+oycXmdn5kn4oqZdzbr+Z5VZYVzFbTTP6tXPu8YoPbmYdK+Wpad1RAUAUYcsHAHjMLMPMLqxwKFNSbbYUvK/QNo1kM0uXdKWkD2s4flhS00hkd87tV+hKcB/v0PBafojmknZ7Zfpqha6MV6WZQoX2oJm1lHRdLR/nTUl3mlkTSTKztmZ2rr46i+rWAUDU4Qo1APxDE0mTvK0JpZI2ShpTi/u/JKmvpJUKbaf4sXPuSzOr7vg+SaVmtlKhq+D7w8w/StJMMzuq0FX2g7W47zOSXjGzQkkrJK2vapFzbqWZLZe0VtJmSYtqE9A595aZXSJpsbdF+4ikEc65TWa2yPtByte9fdRfWafT2BsOAHXNnHNBZwAARICZNXHOHfFuPyCptXPu+wHHAoC4xxVqAIgf3zazBxV6bt8q6fZg4wBAYuAKNQAAABAGfigRAAAACAOFGgAAAAgDhRoAAAAIA4UaAAAACAOFGgAAAAgDhRoAAAAIw/8Drjk/Pv7RLdUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 864x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.semilogx(smooth_range, smoothed_dists)\n",
    "plt.xlabel('Smoothing Parameter')\n",
    "plt.ylabel('JS Distance')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.47588499532711054"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.log(np.log(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
